package com.yc.Testjvm.classload.demo;

/**
 * Byte数组处理工具
 * @author Administrator
 *
 */
public class ByteUtils {

	public static int  bytes2Int(byte[] b, int start, int len) {
		int sum = 0;
		int end = start + len;
		for (int i = start; i < end; i++) {
			int n = ((int) b[i]) & 0xff;
			n <<= (--len) * 8;
			sum = n + sum;
		}
		return sum;
	}
	
	public static byte[] int2Bytes(int value, int len) {
		byte[] b = new byte[len];
		for (int i = 0; i < len; i++) {
			b[len - i - 1] = (byte) ((value >> 8 * i));
		}
		return b;
	}
	
	public static String bytes2String(byte[] b, int start, int len) {
		return new String(b, start, len);
	}
	
	public static byte[] string2Bytes(String str) {
		return str.getBytes();
	}
	
	/**
	 * 替换byte[]
	 * @param originalBytes	原始字节数组
	 * @param offset		从offset开始替换
	 * @param len			从offset往后len的长度 为替换的长度
	 * @param replaceBytes	替换的字节数组
	 * @return
	 * 思路：
	 * 	新字节数组相当于把原来需要替换的字节数组整个去掉，然后加上新的要替换的字节数组
	 */
	public static byte[] bytesReplace(byte[] originalBytes, int offset, int len, byte[] replaceBytes) {
		byte[] newBytes = new byte[originalBytes.length + (replaceBytes.length - len)];//新总长度= 原长度 -把原来的字节数组长度 + 新的字节数组长度
		System.arraycopy(originalBytes, 0, newBytes, 0, offset);//复制第一段：0 ~ offset
		System.arraycopy(replaceBytes, 0, newBytes, offset, replaceBytes.length);//复制第二段：offset ~ offset + newLen
		System.arraycopy(originalBytes, offset + len, newBytes, offset + replaceBytes.length, originalBytes.length - offset - len);//复制第三段：offset + oldLen  ~ originLen
		return newBytes;
	}
	
	
	
}
